# coding="UTF-8"?
from Placard.Plante import *
from Placard.Savane import *
from Placard.Parameters import *
import random
'''
Created on Jun 17, 2013

@author: Brieg
'''

class Animal():
    '''
    classdocs
    '''
    global TAILLE
    global FAIM_MAXI
    global SPHERE

    def __init__(self,espece, faim, position, text):
        '''
        Constructor
        '''
        self.espece = espece
        self.faim = faim
        self.position=position
        self.statut="vivant"
        self.text= text
        
    def mange(self,Plante):
        '''
        Mange(Plante,Savane)
        '''
        Plante.mourir()     
        self.faim = 0

    def deplacer(self,x,y,Savane):   
        """
        Cette fonction sers a masquer la partie "technique" du mecanisme de deplacement dans les fonctions bouger et chasser. 
        Elle fait le calcul du deplacement, et assure le cote circulaire de la carte si on est en mode SPHERE. 
        
        x est le deplacement vertical et y le deplacement horizontal 
        
        La fonction renvoie 1 si le deplacement a ete fait, et 0 si quelque chose l'a bloque"""
        
        "on sauvegarde temporairement la position actuelle de l'animal"
        oldX = self.position[0]
        oldY = self.position[1]
        
        "calcul du nouveau x"
        x = x + self.position[0]
        if SPHERE==1: 
            "mode sphere"    
            if x >= TAILLE:
                "la creature fait le tour de la carte"
                x = 0
            if x < 0:
                x = TAILLE-1 
        else:
            "mode carte"
            if x >= TAILLE:
                "La creature reste au bord de la carte"
                x = TAILLE-1
                
        "calcul du nouveau y"
        y = y + self.position[1]
        if SPHERE==1: 
            "mode sphere"    
            if y >= TAILLE:
                "la creature fait le tour de la carte"
                y = 0 
            if y < 0:
                y = TAILLE - 1
        else:
            "mode carte"
            if y >= TAILLE:
                "La creature reste au bord de la carte"
                y = TAILLE-1
        
        " on verifie maintenant si un autre animal existe deja sur cette nouvelle parcelle si oui, on se deplace pas"
        if Savane.Savane[x][y][1] != 0:
            return 0
        else:        
            " on inscrit la nouvelle position dans la memoire interne de l'animal"
            self.position[0] = x
            self.position[1] = y
            "on supprime l'animal de la parcelle de savanne actuelle"
            Savane.Savane[oldX][oldY][1] = 0
            "on met a jour la position de l'animal dans l'objet Savanne"
            Savane.Savane[self.position[0]][self.position[1]][1]= self
            
            "on renvoie 1 pour dire que le deplacement c'est bien deroule"
            return 1
        
        
                
    def bouger(self,Savane):
        '''
        L'animal, repu de son repas, se deplace de maniere aleatoire, mais il peut etre bloque a cause de d'un autre animal
        sur la parcelle de destination. D'ou le fait qu'il essaye de se deplacer tant que la fonction de deplacement
        renvoie 0. il y a un compteur de d'essai max pour les deplacement pour pas rester bloquer si l'animal
        est encercle.
        '''
        depOk = 0
        cpt=0
        ranDepX = random.randint(-1,1) 
        ranDepY = random.randint(-1,1)
        while (depOk == 0 and cpt < 4):
            depOk =  self.deplacer(ranDepX, ranDepY, Savane)
            cpt= cpt+1
       
    
    def chasser(self): 
        '''
        L'animal,recommence a avoir faim, il va se deplacer vers la plante qui lui correspond qui est la plus proche
        '''

        pass
     
        
    def action(self,Savane):
        if self.faim == 0:
            self.faim += 1
            
        elif self.faim == 1:
            plante = Savane.Savane[self.position[0]][self.position[1]][0]
            Savane.Savane[self.position[0]][self.position[1]][0] = plante.semer(self.espece + 1,self.position)
            self.faim += 1
        
        elif 1<self.faim <3 :
            self.bouger(Savane)
            print(self.text,"[",self.position,",",self.faim,"]")
            
        
        elif 3<=self.faim <7:
            self.chasser()
                
        elif self.faim == 7:
            self.statut="Mort"  
            

         
            
            
            
        
        
        